﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.IO;

namespace JLM2
{
    public class JLMPLCCommands
    {
        public readonly string plcCmdPrefix = ":";  // plc 命令前缀
        public readonly string plcX01Cmd = "01 01 "; // 读取M状态
        public readonly string plcX03Cmd = "01 03 "; // 读取D数据    
        public readonly string plcX05Cmd = "01 05 "; // 设置M状态
        public readonly string plcX06Cmd = "01 06 "; // 设置D数据

        // 产品参数
        public readonly string cpSZBH;            // 设置编号
        public readonly string cpDQBH;            // 读取编号
        public readonly string cpSZMC;            // 设置名称
        public readonly string cpDQMC;            // 读取名称
        public readonly string cpSZTH;            // 设置图号
        public readonly string cpDQTH;            // 读取图号
        public readonly string cpSZWJ;            // 设置外径
        public readonly string cpDQWJ;            // 读取外径
        public readonly string cpSZYD;            // 设置硬度
        public readonly string cpDQYD;            // 读取硬度
        public readonly string cpSZCL;            // 设置材料
        public readonly string cpDQCL;            // 读取材料

        // 测试参数
        public readonly string csSZZXC;           // 设置测试总行程
        public readonly string csDQZXC;           // 读取测试总行程
        public readonly string csSZSJ;            // 设置测试时间
        public readonly string csDQSJ;            // 读取测试时间
        public readonly string csSZZACS;          // 设置障碍次数
        public readonly string csDQZACS;          // 读取障碍次数
        public readonly string csSZCSFZ;          // 设置测试负载
        public readonly string csDQCSFZ;          // 读取测试负载
        public readonly string csSZCSSD;          // 设置测试速度
        public readonly string csDQCSSD;          // 读取测试速度
        public readonly string csSZZWWGD;         // 设置障碍物高度
        public readonly string csDQZWWGD;         // 读取障碍物高度

        // 运行模式 按钮集
        public readonly string yxBtnGBMS;         // 国标模式按钮
        public readonly string yxBtnDQGBMS;       // 读取国标模式按钮状态

        public readonly string yxBtnOBMS;         // 欧标模式按钮
        public readonly string yxBtnDQOBMS;       // 读取国标模式按钮状态

        public readonly string yxBtnMBMS;         // 美标模式按钮        
        public readonly string yxBtnDQMBMS;       // 读取美标模式按钮  
        
        public readonly string yxBtnAMS;          // A模式按钮
        public readonly string yxBtnDQAMS;        // 读取A模式按钮

        public readonly string yxBtnBMS;          // B模式按钮
        public readonly string yxBtnDQBMS;        // 读取B模式按钮

        public readonly string yxBtnCMS;          // C模式按钮
        public readonly string yxBtnDQCMS;        // 读取C模式按钮

        public readonly string yxBtnDMS;         // D模式按钮
        public readonly string yxBtnDQDMS;       // 读取D模式按钮

        public readonly string yxBtnEMS;         // E模式按钮
        public readonly string yxBtnDQEMS;       // 读取E模式按钮

        public readonly string yxBtnFMS;         // F模式按钮
        public readonly string yxBtnDQFMS;       // 读取F模式按钮

        public readonly string yxBtnKSCS;         // 开始测试按钮
        public readonly string yxBtnBCSJ;         // 保存数据按钮
        public readonly string yxBtnSC;           // 删除按钮
        public readonly string yxBtnTZCS;         // 停止测试按钮

        public readonly string yxSZZZSJ;          // 设置正转时间
        public readonly string yxDQZZSJ;          // 读取正转时间
        public readonly string yxSZFZSJ;          // 设置反转时间
        public readonly string yxDQFZSJ;          // 读取反转时间
        public readonly string yxSZTDSJ;          // 设置停顿时间
        public readonly string yxDQTDSJ;          // 读取停顿时间

        // 运行状态 - 机器状态
        public readonly string yxZTDJZ;             // 待机中
        public readonly string yxZTCSWB;            // 测试完毕
        public readonly string yxZTZZZ;             // 正转中
        public readonly string yxZTFZZZ;            // 反转中
        public readonly string yxZTTDZ;             // 停顿中
        public readonly string yxZTJQZT;            // 机器状态地址

        // 运行状态
        public readonly string yxZTDQXC;            // 当前行程
        public readonly string yxZTPJSD;            // 平均速度
        public readonly string yxZTXZSD;            // 现在速度
        public readonly string yxZTYCSJ;            // 已测时间
        public readonly string yxZTPZCS;            // 碰撞速度
        public readonly string yxZTDQWD;            // 当前温度
        public readonly string yxZTLZBX;            // 轮子变形

        // 系统参数设置 
        public readonly string xtcsSZGLWJ;          // 设置滚轮外径
        public readonly string xtcsDQGLWJ;          // 读取滚轮外径

        public readonly string xtcsSZBXBL;          // 设置波箱比例
        public readonly string xtcsDQBXBL;          // 读取波箱比例    

        public readonly string xtcsSZZATGS;          // 设置障碍条个数
        public readonly string xtcsDQZATGS;          // 读取障碍条个数

        public readonly string xtcsSZGYBKS;         // 设置感应板块数
        public readonly string xtcsDQGYBKS;          // 读取感应板块数

        public readonly string xtcsSZYL;          // 设置压力
        public readonly string xtcsDQYL;          // 读取压力

        public readonly string xtcsSZWD;          // 设置温度
        public readonly string xtcsDQWD;          // 读取温度

        public readonly string xtcsSZPCWD;          // 设置偏差温度
        public readonly string xtcsDQPCWD;          // 读取偏差温度

        public readonly string xtcsBTNQP;          // 按钮 去皮
        public readonly string xtcsBTNJZ;          // 按钮 校准

        // 系统参数压力设置
        public readonly string xtcsSZYL1;         
        public readonly string xtcsDQYL1;         

        public readonly string xtcsSZYL2;         
        public readonly string xtcsDQYL2;         

        public readonly string xtcsSZYL3;         
        public readonly string xtcsDQYL3;         

        public readonly string xtcsSZYL4;         
        public readonly string xtcsDQYL4;         

        public readonly string xtcsSZYL5;         
        public readonly string xtcsDQYL5;         

        public readonly string xtcsSZYL6;         
        public readonly string xtcsDQYL6;         

        public readonly string xtcsSZYL7;         
        public readonly string xtcsDQYL7;         

        public readonly string xtcsSZYL8;         
        public readonly string xtcsDQYL8;         

        public readonly string xtcsSZYL9;         
        public readonly string xtcsDQYL9;         

        public readonly string xtcsSZYL10;        
        public readonly string xtcsDQYL10;        


        public JLMPLCCommands(string jlmPLCFile)
        {
            StreamReader file = File.OpenText(jlmPLCFile);
            JsonTextReader reader = new JsonTextReader(file);
            JObject jsonObject = (JObject)JToken.ReadFrom(reader);

            string plcAddr = "";

            // 设置产品信息
            plcAddr = jsonObject["cp_sz_bh"].ToString();        
            cpSZBH = plcX06Cmd + plcAddr; // 01 06 XX XX
            cpDQBH = plcX03Cmd + plcAddr; // 01 03 XX XX

            plcAddr = jsonObject["cp_sz_mc"].ToString();        
            cpSZMC = plcX06Cmd + plcAddr;
            cpDQMC = plcX03Cmd + plcAddr;

            plcAddr = jsonObject["cp_sz_th"].ToString();
            cpSZTH = plcX06Cmd + plcAddr;
            cpDQTH = plcX03Cmd + plcAddr;

            plcAddr = jsonObject["cp_sz_wj"].ToString();
            cpSZWJ = plcX06Cmd + plcAddr;
            cpDQWJ = plcX03Cmd + plcAddr;

            plcAddr = jsonObject["cp_sz_yd"].ToString();
            cpSZYD = plcX06Cmd + plcAddr;
            cpDQYD = plcX03Cmd + plcAddr;

            plcAddr = jsonObject["cp_sz_cl"].ToString();
            cpSZCL = plcX06Cmd + plcAddr;
            cpDQCL = plcX03Cmd + plcAddr;

            // 设定测试参数
            plcAddr = jsonObject["cs_sz_zxc"].ToString();
            csSZZXC = plcX06Cmd + plcAddr; // 01 06 XX XX
            csDQZXC = plcX03Cmd + plcAddr; // 01 03 XX XX

            plcAddr = jsonObject["cs_sz_sj"].ToString();
            csSZSJ = plcX06Cmd + plcAddr;
            csDQSJ = plcX03Cmd + plcAddr;

            plcAddr = jsonObject["cs_sz_zacs"].ToString();
            csSZZACS = plcX06Cmd + plcAddr;
            csDQZACS = plcX03Cmd + plcAddr;

            plcAddr = jsonObject["cs_sz_csfz"].ToString();
            csSZCSFZ = plcX06Cmd + plcAddr;
            csDQCSFZ = plcX03Cmd + plcAddr;

            plcAddr = jsonObject["cs_sz_cssd"].ToString();
            csSZCSSD = plcX06Cmd + plcAddr;
            csDQCSSD = plcX03Cmd + plcAddr;

            plcAddr = jsonObject["cs_sz_zwwgd"].ToString();
            csSZZWWGD = plcX06Cmd + plcAddr;
            csDQZWWGD = plcX03Cmd + plcAddr;

            // 运行模式按钮集 // 01 05 xx xx
            plcAddr = jsonObject["yx_btn_gbms"].ToString();         // 国标模式按钮
            yxBtnGBMS = plcX05Cmd + plcAddr;
            yxBtnDQGBMS = plcX01Cmd + plcAddr;

            plcAddr = jsonObject["yx_btn_obms"].ToString();         // 欧标模式按钮
            yxBtnOBMS = plcX05Cmd + plcAddr;
            yxBtnDQOBMS = plcX01Cmd + plcAddr;

            plcAddr = jsonObject["yx_btn_mbms"].ToString();         // 美标模式按钮        
            yxBtnMBMS = plcX05Cmd + plcAddr;
            yxBtnDQMBMS = plcX01Cmd + plcAddr;

            plcAddr = jsonObject["yx_btn_ams"].ToString();          // A模式按钮
            yxBtnAMS = plcX05Cmd + plcAddr;
            yxBtnDQAMS = plcX01Cmd + plcAddr;

            plcAddr = jsonObject["yx_btn_bms"].ToString();          // B模式按钮
            yxBtnBMS = plcX05Cmd + plcAddr;
            yxBtnDQBMS = plcX01Cmd + plcAddr;

            plcAddr = jsonObject["yx_btn_cms"].ToString();          // C模式按钮
            yxBtnCMS = plcX05Cmd + plcAddr;
            yxBtnDQCMS = plcX01Cmd + plcAddr;

            plcAddr = jsonObject["yx_btn_dms"].ToString();         // D模式按钮
            yxBtnDMS = plcX05Cmd + plcAddr;
            yxBtnDQDMS = plcX01Cmd + plcAddr;

            plcAddr = jsonObject["yx_btn_ems"].ToString();         // E模式按钮
            yxBtnEMS = plcX05Cmd + plcAddr;
            yxBtnDQEMS = plcX01Cmd + plcAddr;

            plcAddr = jsonObject["yx_btn_fms"].ToString();         // F模式按钮
            yxBtnFMS = plcX05Cmd + plcAddr;
            yxBtnDQFMS = plcX01Cmd + plcAddr;

            plcAddr = jsonObject["yx_btn_kscs"].ToString();         // 开始测试按钮
            yxBtnKSCS = plcX05Cmd + plcAddr;
            plcAddr = jsonObject["yx_btn_bcsj"].ToString();         // 保存数据按钮
            yxBtnBCSJ = plcX05Cmd + plcAddr;
            plcAddr = jsonObject["yx_btn_sc"].ToString();           // 删除按钮
            yxBtnSC = plcX05Cmd + plcAddr;
            plcAddr = jsonObject["yx_btn_tzcs"].ToString();         // 停止测试按钮
            yxBtnTZCS = plcX05Cmd + plcAddr;

            plcAddr = jsonObject["cs_sz_zzsj"].ToString();      
            yxSZZZSJ = plcX06Cmd + plcAddr;
            yxDQZZSJ = plcX03Cmd + plcAddr;

            plcAddr = jsonObject["cs_sz_fzsj"].ToString();       
            yxSZFZSJ = plcX06Cmd + plcAddr;
            yxDQFZSJ = plcX03Cmd + plcAddr;

            plcAddr = jsonObject["cs_sz_tdsj"].ToString();      
            yxSZTDSJ = plcX06Cmd + plcAddr;
            yxDQTDSJ = plcX03Cmd + plcAddr;

            // 运行状态 01 01 xx xx
            plcAddr = jsonObject["yx_zt_djz"].ToString();
            yxZTDJZ = plcX01Cmd + plcAddr;             // 待机中
            plcAddr = jsonObject["yx_zt_cswb"].ToString();
            yxZTCSWB = plcX01Cmd + plcAddr;            // 测试完毕
            plcAddr = jsonObject["yx_zt_zzz"].ToString();
            yxZTZZZ = plcX01Cmd + plcAddr; ;             // 正转中
            plcAddr = jsonObject["yx_zt_fzz"].ToString();
            yxZTFZZZ = plcX01Cmd + plcAddr; ;            // 反转中
            plcAddr = jsonObject["yx_zt_tdz"].ToString();
            yxZTTDZ = plcX01Cmd + plcAddr;             // 停顿中

            plcAddr = jsonObject["yx_zt_jqzt"].ToString();
            yxZTJQZT = plcX03Cmd + plcAddr;             // 机器状态

            // 测试数据 01 03 xx xx
            plcAddr = jsonObject["yx_zt_dqxc"].ToString();             // 当前行程
            yxZTDQXC = plcX03Cmd + plcAddr;           
            plcAddr = jsonObject["yx_zt_pjsd"].ToString();            // 平均速度
            yxZTPJSD = plcX03Cmd + plcAddr;            
            plcAddr = jsonObject["yx_zt_xzsd"].ToString();            // 现在速度
            yxZTXZSD = plcX03Cmd + plcAddr;            
            plcAddr = jsonObject["yx_zt_ycsj"].ToString();            // 已测时间
            yxZTYCSJ = plcX03Cmd + plcAddr;            
            plcAddr = jsonObject["yx_zt_pzcs"].ToString();            // 碰撞速度
            yxZTPZCS = plcX03Cmd + plcAddr;            
            plcAddr = jsonObject["yx_zt_dqwd"].ToString();            // 当前温度
            yxZTDQWD = plcX03Cmd + plcAddr;            
            plcAddr = jsonObject["yx_zt_lzbx"].ToString();            // 轮子变形
            yxZTLZBX = plcX03Cmd + plcAddr;

            // 系统参数设置
            plcAddr = jsonObject["xt_cs_glwj"].ToString();
            xtcsSZGLWJ = plcX06Cmd + plcAddr; // 01 06 XX XX
            xtcsSZGLWJ = plcX03Cmd + plcAddr; // 01 03 XX XX

            plcAddr = jsonObject["xt_cs_gybks"].ToString();
            xtcsSZGYBKS = plcX06Cmd + plcAddr; // 01 06 XX XX
            xtcsDQGYBKS = plcX03Cmd + plcAddr; // 01 03 XX XX

            plcAddr = jsonObject["xt_cs_bxbl"].ToString();
            xtcsSZBXBL = plcX06Cmd + plcAddr; // 01 06 XX XX
            xtcsDQBXBL = plcX03Cmd + plcAddr; // 01 03 XX XX

            plcAddr = jsonObject["xt_cs_zatgs"].ToString();
            xtcsSZZATGS = plcX06Cmd + plcAddr; // 01 06 XX XX
            xtcsDQZATGS = plcX03Cmd + plcAddr; // 01 03 XX XX

            plcAddr = jsonObject["xt_cs_dqylz"].ToString();
            xtcsSZYL = plcX06Cmd + plcAddr; // 01 06 XX XX
            xtcsDQYL = plcX03Cmd + plcAddr; // 01 03 XX XX

            plcAddr = jsonObject["xt_cs_dqwd"].ToString();
            xtcsSZWD = plcX06Cmd + plcAddr; // 01 06 XX XX
            xtcsDQWD = plcX03Cmd + plcAddr; // 01 03 XX XX

            plcAddr = jsonObject["xt_cs_pcwd"].ToString();
            xtcsSZPCWD = plcX06Cmd + plcAddr; // 01 06 XX XX
            xtcsDQPCWD = plcX03Cmd + plcAddr; // 01 03 XX XX

            plcAddr = jsonObject["xt_cs_qp"].ToString();
            xtcsBTNQP = plcX05Cmd + plcAddr; // 01 06 XX XX

            plcAddr = jsonObject["xt_cs_jz"].ToString();
            xtcsBTNJZ = plcX05Cmd + plcAddr; // 01 06 XX XX

            // 系统压力
            plcAddr = jsonObject["xt_cs_bl1"].ToString();
            xtcsSZYL1 = plcX06Cmd + plcAddr; // 01 06 XX XX
            xtcsDQYL1 = plcX03Cmd + plcAddr; // 01 03 XX XX

            plcAddr = jsonObject["xt_cs_bl2"].ToString();
            xtcsSZYL2 = plcX06Cmd + plcAddr; // 01 06 XX XX
            xtcsDQYL2 = plcX03Cmd + plcAddr; // 01 03 XX XX

            plcAddr = jsonObject["xt_cs_bl3"].ToString();
            xtcsSZYL3 = plcX06Cmd + plcAddr; // 01 06 XX XX
            xtcsDQYL3 = plcX03Cmd + plcAddr; // 01 03 XX XX

            plcAddr = jsonObject["xt_cs_bl4"].ToString();
            xtcsSZYL4 = plcX06Cmd + plcAddr; // 01 06 XX XX
            xtcsDQYL4 = plcX03Cmd + plcAddr; // 01 03 XX XX

            plcAddr = jsonObject["xt_cs_bl5"].ToString();
            xtcsSZYL5 = plcX06Cmd + plcAddr; // 01 06 XX XX
            xtcsDQYL5 = plcX03Cmd + plcAddr; // 01 03 XX XX

            plcAddr = jsonObject["xt_cs_bl6"].ToString();
            xtcsSZYL6 = plcX06Cmd + plcAddr; // 01 06 XX XX
            xtcsDQYL6 = plcX03Cmd + plcAddr; // 01 03 XX XX

            plcAddr = jsonObject["xt_cs_bl7"].ToString();
            xtcsSZYL7 = plcX06Cmd + plcAddr; // 01 06 XX XX
            xtcsDQYL7 = plcX03Cmd + plcAddr; // 01 03 XX XX

            plcAddr = jsonObject["xt_cs_bl8"].ToString();
            xtcsSZYL8 = plcX06Cmd + plcAddr; // 01 06 XX XX
            xtcsDQYL8 = plcX03Cmd + plcAddr; // 01 03 XX XX

            plcAddr = jsonObject["xt_cs_bl9"].ToString();
            xtcsSZYL9 = plcX06Cmd + plcAddr; // 01 06 XX XX
            xtcsDQYL9 = plcX03Cmd + plcAddr; // 01 03 XX XX

            plcAddr = jsonObject["xt_cs_bl10"].ToString();
            xtcsSZYL10 = plcX06Cmd + plcAddr; // 01 06 XX XX
            xtcsDQYL10 = plcX03Cmd + plcAddr; // 01 03 XX XX
            
        }
    }
}
